home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Supervisor's Toolkit
/
Network Supervisor's Toolkit.iso
/
menus
/
mcmenu
/
netbios.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1996-07-10
|
3KB
|
116 lines
UNIT NetBIOS;
{ ver 0.100
^^ bug fix
^ minor rev
^ major rev
{ Turbo Pascal 5.5 }
{ 0.100 work start nov 25 1991 Tony Bigras (604) 753-3245 x2588 }
{ Public Domain, Absolutly NO liability accepted! }
{ for use of NetBIOS functions }
{ 0.723 additional checks for netbios
}
INTERFACE
USES Dos;
CONST
ncbaddname= $30;
ncbdelname= $31;
ncbreset= $32;
ncbadapterstatus= $33;
ncbsessionstatus= $34;
ncbaddgroup= $36;
ncbcall= $10;
ncblisten= $11;
ncbhangup= $12;
ncbsend= $14;
ncbreceive= $15;
ncbnetbiosstatus= $7F; { query if netbios loaded }
postit= $80; { add to any waitable routine for concurrent action }
ncbsenddatagram= $20; { next 4 are guesses }
ncbrecdatagram= $21;
ncbsendbroadcast= $22;
ncbrecbroadcast= $23;
TYPE
netname = ARRAY[1..16] OF CHAR;
{ Format of name is padded trailing with blanks }
{ with a 0 in 16 }
nameorbufinfo= RECORD
CASE BOOLEAN OF
FALSE: (name: netname); { Network name }
TRUE: (nextbuflen: WORD; { Length of next buffer in chain }
nexbufptr: POINTER) { Pointer to next buffer in chain }
END; { CASE }
ncbtype = RECORD { NetBIOS Network Control Block }
command, { NetBIOS command }
retcode, { Return code }
lsn, { Logical session number }
num: BYTE; { number of local name ie handle }
bufptr: POINTER; { to message buffer }
len: WORD; { Message buffer length 65535 maximum in session }
callname: { Destination name or info about second buffer in }
nameorbufinfo; { a CHAIN SEND command . }
name: netname; { Source local name }
rto, { Receive timeout in half seconds }
sto: BYTE; { Send timeout in half seconds }
post: POINTER; { Interrupt completion routine address }
lanadaptnum: 0..1; { Number of lan adapter }
cmdcomplete: BYTE; { Command complete flag }
reserved: ARRAY[1..14] OF BYTE; { reserved for NetBIOS }
END; { ncb }
VAR
netbiosactive: BOOLEAN;
PROCEDURE nbcall(VAR n: ncbtype);
IMPLEMENTATION
PROCEDURE post; INTERRUPT; { NetBIOS completion routine }
BEGIN { post }
END; { post }
PROCEDURE nbcall(VAR n: ncbtype);
VAR
reg: registers;
BEGIN { nbcall }
reg.ES:= SEG(n);
reg.BX:= OFS(n);
reg.AX:= $0100; { don't know why from some c code }
INTR($5C,reg);
END; { nbcall }
PROCEDURE checknetbios;
VAR
tvect,tvect2: POINTER;
ncb: ncbtype;
BEGIN
{ 0.723 }
GETINTVEC($5C,tvect);
GETINTVEC($5D,tvect2);
netbiosactive:= tvect<>tvect2; { tvect2 should have been unimplemented }
IF netbiosactive THEN
BEGIN
ncb.command:= ncbnetbiosstatus;
Nbcall(ncb);
IF (ncb.retcode<> 35) THEN
netbiosactive:= FALSE
ELSE
netbiosactive:= TRUE;
END; { maybe active }
END; { checknetbios }
BEGIN { NetBIOS }
checknetbios;
END. { NetBIOS }